package org.huangrui.spark.scala.core.rdd.operate.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author hr
 * @Create 2024-10-18 6:17 
 */
object Spark14_Operate_Transform_Partition {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("spark")
    val sc = new SparkContext(conf)
    val ints = List(1, 3, 5, 2, 4, 6)
    // 【1，3，5】【2，4，6】
    val rdd = sc.parallelize(ints, 2)
    // 【】【2，4，6】
    val filterRdd = rdd.filter((x: Int) => x % 2 == 0).repartition(1)
    // TODO 改变分区。
    //      合并分区：缩减分区
    //      coalesce方法默认没有shuffle功能，所以数据不会被打乱重新组合，所以如果要扩大分区是无法实现的。
    //      coalesce方法可以设定第二个shuffle参数，如果设定shuffle功能为true，那么可以扩大分区。
    filterRdd.coalesce(3, shuffle = true).saveAsTextFile("output")

    // TODO 重分区。
    //      repartition方法其实就是设定shuffle为true的coalesce方法
    filterRdd.repartition(3).saveAsTextFile("output2")
    // 缩减分区：coalesce
    // 扩大分区：repartition


    sc.stop()
  }
}
